package com.hspedu.reflection.class_;

import com.hspedu.Car;

/**
 * @author DL5O
 * @version 1.0
 * 演示得到Class对象的各种方式（6种）
 */
public class GetClass_ {
    public static void main(String[] args) throws ClassNotFoundException {

        //1.Class.forName
        String classAllPath = "com.hspedu.Cat";
        Class<?> cls1 = Class.forName(classAllPath);//通过读取配置文件获取到的
        System.out.println(cls1);

        //2.类名.class，应用场景，这种多用于
        Class<?> cls2 = Car.class;
        System.out.println(cls2);

        //3.对象.getClass()，应用场景，有对象实例
        Car car = new Car();
        Class<? extends Car> cls3 = car.getClass();//Car的子类包括Car，决定了下限
        System.out.println(cls3);

        //4.通过类加载器来获取到类的Class对象 类加载器有4种
        //(1).先得到类加载 car
        ClassLoader classLoader = car.getClass().getClassLoader();
        //(2) 通过类加载器得到Class对象
        Class<?> cls4 = classLoader.loadClass(classAllPath);
        System.out.println(cls4);

        //cls 1~4其实是同一个

        //5.基本数据类型获取类对象
        Class<Integer> integerClass = int.class;
        Class<Character> characterClass = char.class;
        Class<Boolean> booleanClass = boolean.class;
        System.out.println(integerClass);

        //6.基本数据的包装类，获取类对象
        Class<Integer> type1 = Integer.TYPE;
        Class<Character> type2 = Character.TYPE;
        System.out.println(type1.hashCode());//1766822961
        System.out.println(integerClass .hashCode());//1766822961
    }
}
